﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Easily
{   
    /// <summary>
    /// 延时函数（ms）
    /// 功能概要：软件延时，单位为毫秒
    /// 使用说明：（1）实例化时，以控件对象为传入参数。
    ///           （2）设置MilliSecond为需要延时的毫秒数
    /// 备注：默认延时为1000毫秒
    /// </summary>
    public partial class frmTimedelaySet : Form
    {
        #region 对外的属性和私有成员
        private int milliSecond;
        /// <summary>
        /// 需要延时的毫秒数
        /// </summary>
        public int MilliSecond
        {
            get { return this.milliSecond; }
            set
            {
                if(value>0 && this.MyIcon != null)
                {
                    this.MyIcon.code.Comment = "延时" + value.ToString() + "毫秒";
                    this.MyIcon.code.InsertCode = "\tDelay_ms(" +
                        value.ToString() + ");//" + this.MyIcon.code.Comment;
                    this.milliSecond = value;
                }
                else if(value == 0 && this.MyIcon != null)
                {
                    this.MyIcon.code.Comment = "";
                    this.MyIcon.code.InsertCode = "";
                    this.milliSecond = value;
                }
            }
        }
        /// <summary>
        /// 存储传入的图标控件
        /// </summary>
        private GeneralIcon MyIcon = null;
        #endregion

        #region 构造函数和对外的方法
        /// <summary>
        /// 类的构造函数
        /// 功能概要：保存控件对象；设置默认延时1000毫秒
        /// </summary>
        /// <param name="icon"></param>
        public frmTimedelaySet(GeneralIcon icon)
        {
            InitializeComponent();
            this.MyIcon = icon;
            if(this.MyIcon.code.Save == "")
                this.MyIcon.code.Save = "1000";//默认延时1000毫秒
            this.restore();
        }
        #endregion

        #region 事件
        /// <summary>
        /// 点击“确定”按钮
        /// 功能概要：设置延时
        /// </summary>
        private void buttonEnsure_Click(object sender, EventArgs e)
        {
            MyIcon.code.Clear();//清空以前代码
            this.MilliSecond = (int)numericUpDowntimedelay.Value;
            this.MyIcon.code.Save = this.MilliSecond.ToString();
            //此句不能少,只有DialogResult=OK才能保存Code 的设置信息。在GeneralIcon.cs1006行要用此结果
            this.DialogResult = DialogResult.OK;//表示当窗体用作对话框时该窗体的结果，
            this.Close();
        }

        /// <summary>
        /// 点击“取消”按钮
        /// 功能概要：退出对话框，并设置对话框结果为取消
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonCancel_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("是否要退出设置？", "设置", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                this.DialogResult = DialogResult.Cancel;
                this.Close();
            }
        }

        /// <summary>
        /// 点击“注释说明”按钮
        /// 功能概要：为控件添加自定义注释说明
        /// </summary>
        private void btn_comment_Click(object sender, EventArgs e)
        {
            using (frmNodeEditer NE = new frmNodeEditer(this.MyIcon.code.Comment))
            {
                if (NE.ShowDialog() == DialogResult.OK)
                {
                    this.MyIcon.code.Comment = NE.NoteEdit;
                }
            }
        }

        #endregion
        #region 内部函数
        /// <summary>
        /// 从保存信息字符串中恢复控件
        /// </summary>
        private void restore()
        {
            //恢复保存的数据，并设置当前选中的RadioButton按钮
            try
            {
                this.MilliSecond = Convert.ToInt32(this.MyIcon.code.Save);
                this.numericUpDowntimedelay.Value = (decimal)this.MilliSecond;
            }
            catch { }
        }
        #endregion
    }
}
